import { ref, onMounted, computed } from 'vue'
import { customerApi } from '@/api/customer'

// 定义状态数据结构
export interface StatusOption {
  id: string | number
  name: string
}

// 创建状态服务类
export class StatusService {
  // 会员状态选项
  private customerStatusOptions = ref<StatusOption[]>([])
  // 加载状态
  private isLoading = ref(false)
  // 错误状态
  private error = ref<string | null>(null)

  // 构造函数
  constructor() {
    // 组件挂载时自动加载状态数据
    this.loadCustomerStatusOptions()
  }

  /**
   * 加载客户状态选项
   * @returns Promise<void>
   */
  async loadCustomerStatusOptions(): Promise<void> {
    if (this.isLoading.value) return

    this.isLoading.value = true
    this.error.value = null

    try {
      const response = await customerApi.getCustomerStatusOptions()
      if (response.code === 0 && Array.isArray(response.data)) {
        this.customerStatusOptions.value = response.data
      } else {
        throw new Error('Failed to load customer status options')
      }
    } catch (err) {
      this.error.value =
        err instanceof Error ? err.message : 'Failed to load customer status options'
      // 加载失败时使用空数组
      this.customerStatusOptions.value = []
    } finally {
      this.isLoading.value = false
    }
  }

  /**
   * 获取客户状态选项
   * @returns StatusOption[]
   */
  getCustomerStatusOptions(): StatusOption[] {
    return this.customerStatusOptions.value
  }

  /**
   * 根据状态ID获取状态名称
   * @param statusId 状态ID
   * @returns string
   */
  getCustomerStatusName(statusId: string | number): string {
    const option = this.customerStatusOptions.value.find(opt => opt.id === statusId)
    return option ? option.name : '未知状态'
  }

  /**
   * 检查是否为会员状态
   * @param statusId 状态ID
   * @returns boolean
   */
  isMemberStatus(statusId: string | number): boolean {
    // 根据实际业务逻辑判断，这里假设所有非0和非null的状态都是会员相关
    return statusId !== 0 && statusId !== '0' && statusId !== null && statusId !== undefined
  }

  /**
   * 检查是否为有效会员状态
   * @param statusId 状态ID
   * @returns boolean
   */
  isValidMemberStatus(statusId: string | number): boolean {
    // 精确判断有效会员状态（根据业务逻辑，有效会员状态ID为2或21）
    return statusId === 2 || statusId === '2' || statusId === 21 || statusId === '21'
  }

  /**
   * 检查是否为过期会员状态
   * @param statusId 状态ID
   * @returns boolean
   */
  isExpiredMemberStatus(statusId: string | number): boolean {
    // 精确判断过期会员状态（根据业务逻辑，过期会员状态ID为20）
    return statusId === 20 || statusId === '20'
  }

  /**
   * 获取有效会员状态值
   * @returns string | number
   */
  getValidMemberStatusValue(): string | number {
    // 直接返回有效会员状态ID（根据业务逻辑，有效会员状态ID为2）
    return 2
  }

  /**
   * 获取非会员状态值
   * @returns string | number
   */
  getNonMemberStatusValue(): string | number {
    // 直接返回非会员状态ID（根据业务逻辑，非会员状态ID为0）
    return 0
  }

  /**
   * 获取过期会员状态值
   * @returns string | number
   */
  getExpiredMemberStatusValue(): string | number {
    // 直接返回过期会员状态ID（根据业务逻辑，过期会员状态ID为20）
    return 20
  }
}

// 导出单例实例
export const statusService = new StatusService()
